package test.tx;

/**
 * @Description
 * @Author Firenut
 * @Date 2023-08-30 15:37
 */


import org.junit.Test;

/**
 * 给定一个单链表，其中的元素按升序排序，将其转换为高度平衡的二叉搜索树。
 * 本题中，一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
 * 举例 给定的有序数组： [-10, -3, 0, 5, 9],
 * 一个可能的答案是：[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树：
 * 0
 * / \
 * -3   9
 * /   /
 * -10  5
 */
public class tcTest1 {

    @Test
    public void test() {
        int[] nums = {-10, -3, 0, 5, 9};
        Treenode tree = dfs(nums, 0, nums.length - 1);
        inorderSearch(tree);
    }

    void inorderSearch(Treenode root) {
        if (root == null) {
            return;
        }
        inorderSearch(root.left);
        System.out.print(root.val + " ");
        inorderSearch(root.right);
    }

    Treenode dfs(int[] nums, int left, int right) {
        if (left > right) return null;
        else if (left == right) return new Treenode(nums[left]);

        int mid = left + (right - left) / 2;

        Treenode lnode = dfs(nums, left, mid - 1);
        Treenode rnode = dfs(nums, mid + 1, right);

        Treenode root = new Treenode(nums[mid]);
        root.left = lnode;
        root.right = rnode;
        return root;
    }

    class Treenode {
        int val;
        Treenode left, right;

        Treenode() {
        }

        Treenode(int val) {
            this.val = val;
        }
    }
}


